package org.seed.rpc.core;

import java.util.Map;
import java.util.function.Consumer;

public interface RegistryClient {

    /**
     * 设置值
     *
     * @param key   键
     * @param value 值
     */
    void put(String key, String value);


    /**
     * 设置值
     *
     * @param key     键
     * @param value   值
     * @param timeout 租约到期时间 (s)
     * @return leaseId
     */
    Long putAndGrant(String key, String value, long timeout);


    /**
     * 续租
     *
     * @param leaseId 租约ID
     */
    void keepAliveOnce(long leaseId);

    /**
     * 删除租用
     *
     * @param leaseId
     */
    public void revoke(long leaseId);

    /**
     * 根据指定的键获取值
     *
     * @param key 键
     * @return 返回注册中心的 json 存储
     */
    String get(String key);


    /**
     * 查询指定前缀的数据
     *
     * @param prefix
     */
    Map<String, String> getPrefix(String prefix);

    /**
     * 清理指定key的数据
     *
     * @param key 键
     */
    void remove(String key);

    /**
     * 监听指定key的变动
     *
     * @param prefix   键
     * @param consumer 内容变化后执行的方法
     */
    void prefixOnChange(String prefix, Consumer consumer);




}
